今天是第9天我想寫一個關於兩隻斑馬魚的行為分析,以下是程式碼
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
# 假設已經有兩隻斑馬魚的行為數據,並且每隻斑馬魚的行為數據是 3 維的 (例如位置 x, y 和速度)
# data_shape = (樣本數, 時間步長, 特徵數)
zebrafish1_data = np.random.rand(1000, 50, 3) # 1000 個樣本,每個樣本有 50 個時間步長,每個步長有 3 個特徵
zebrafish2_data = np.random.rand(1000, 50, 3)
# 假設標籤是二分類的 (例如 0: 正常, 1: 異常)
labels = np.random.randint(2, size=(1000,))
# 建立 LSTM 模型
model = Sequential()
model.add(LSTM(64, input_shape=(50, 3), return_sequences=True))
model.add(LSTM(64))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
# 編譯模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 合併兩隻斑馬魚的數據
combined_data = np.concatenate([zebrafish1_data, zebrafish2_data], axis=-1) # 在特徵維度上合併
# 訓練模型
model.fit(combined_data, labels, epochs=20, batch_size=32, validation_split=0.2)
# 預測
predictions = model.predict(combined_data)
print(predictions)
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
numpy
: 用於處理數組(矩陣)數據。tensorflow
和 keras
: 用於建立和訓練深度學習模型。Sequential
是一個順序模型,LSTM
是長短期記憶層(適用於時間序列數據),Dense
是全連接層。zebrafish1_data = np.random.rand(1000, 50, 3)
zebrafish2_data = np.random.rand(1000, 50, 3)
labels = np.random.randint(2, size=(1000,))
zebrafish1_data
和 zebrafish2_data
是兩隻斑馬魚的行為數據。
(1000, 50, 3)
,表示有 1000 個樣本,每個樣本有 50 個時間步長,每個時間步長有 3 個特徵(例如位置 x, y 和速度)。np.random.rand
用於生成 0 到 1 之間的隨機浮點數。labels
是這些樣本對應的標籤,這裡假設標籤是二分類(0 或 1)。
np.random.randint(2, size=(1000,))
生成了 1000 個 0 或 1 的隨機整數標籤。model = Sequential()
model.add(LSTM(64, input_shape=(50, 3), return_sequences=True))
model.add(LSTM(64))
model.add(Dense(32, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
Sequential
模型是一種線性堆疊模型,適合從頭到尾執行操作。LSTM(64, input_shape=(50, 3), return_sequences=True)
:
64
: 表示該 LSTM 層有 64 個隱藏神經元。input_shape=(50, 3)
: 輸入數據的形狀為 (50, 3)
,即每個樣本有 50 個時間步長,每個時間步長有 3 個特徵。return_sequences=True
: 表示該層會返回完整的序列,而不是只返回最終的隱藏狀態。LSTM(64)
:
return_sequences
默認為 False
)。Dense(32, activation='relu')
:
Dense(1, activation='sigmoid')
:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
optimizer='adam'
: 使用 Adam 優化器來更新模型的權重,Adam 是一種自適應學習率的優化算法,常用於訓練深度神經網路。loss='binary_crossentropy'
: 二分類交叉熵損失函數,用於二分類問題的損失計算。metrics=['accuracy']
: 在訓練過程中,我們會跟踪模型的準確性(accuracy)作為評估指標。combined_data = np.concatenate([zebrafish1_data, zebrafish2_data], axis=-1)
np.concatenate
: 將兩隻斑馬魚的數據在最後一個維度上進行拼接,即特徵維度。axis=-1
: 指定在特徵維度(第三維度)上進行拼接。結果的形狀會是 (1000, 50, 6)
,其中 6
是兩隻斑馬魚的特徵數目之和。model.fit(combined_data, labels, epochs=20, batch_size=32, validation_split=0.2)
model.fit
: 開始訓練模型。epochs=20
: 訓練過程將重複 20 次。batch_size=32
: 每次梯度更新使用 32 個樣本。validation_split=0.2
: 將 20% 的數據用作驗證集,用於在訓練期間評估模型的性能。predictions = model.predict(combined_data)
print(predictions)
model.predict
: 使用訓練好的模型對斑馬魚的行為數據進行預測。predictions
是模型對每個樣本的預測結果,這裡的結果會是每個樣本的預測分類(介於 0 到 1 之間的概率值)。這段程式碼主要用於通過 LSTM 模型來分析兩隻斑馬魚的行為。數據經過 LSTM 層的處理,最終輸出為一個二分類結果,可以用來判斷斑馬魚的行為是否異常。您可以根據需求進一步調整這個模型,例如添加更多的數據特徵、調整 LSTM 層的數量和神經元數量,或是使用不同的損失函數來適應不同的應用場景。